package com.sword.demo.nacos.config.local.interfaces.api;

import com.sword.demo.nacos.config.local.properties.UserProperties;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 用户接口
 * @author sword
 * @date 2022/1/11 21:15
 */
@RestController
@Api(tags = "用户接口")
@RequestMapping("/user")
@RequiredArgsConstructor
@RefreshScope(proxyMode = ScopedProxyMode.DEFAULT)
@Getter
public class UserApi {

    /**
     * 用户参数
     */
    private final UserProperties userProperties;

    /**
     * 用户名称
     */
    @Value("${user.name}")
    private String userName;

    /**
     * 获取用户名称
     * @return java.lang.String
     * @author sword
     * @date 2022/1/11 21:16
     */
    @GetMapping("/name")
    @ApiOperation("获取用户名称")
    public String getUserName() {
        return userName;
    }

    /**
     * 获取用户名称(通过私有方法)，如果@RefreshScope的proxyMode不设置为ScopedProxyMode.DEFAULT，则此方法会返回null
     * @return java.lang.String
     * @author sword
     * @date 2022/1/11 21:16
     */
    @GetMapping("/name/private-method")
    @ApiOperation("获取用户名称(通过私有方法)")
    private String getUserNameByPrivateMethod() {
        return userName;
    }

    /**
     * 获取用户名称(通过私有方法和成员变量Getter方法)，如果@RefreshScope的proxyMode不设置为ScopedProxyMode.DEFAULT，
     * 此方法可以正常返回数据
     * @return java.lang.String
     * @author sword
     * @date 2022/1/11 21:16
     */
    @GetMapping("/name/private-method/getter-method")
    @ApiOperation("获取用户名称(通过私有方法和成员变量Getter方法)")
    private String getUserNameByPrivateMethodAndGetterMethod() {
        return getUserName();
    }

    /**
     * 获取用户
     * @return java.lang.String
     * @author sword
     * @date 2022/1/11 21:16
     */
    @GetMapping("")
    @ApiOperation("获取用户")
    public UserProperties getUser() {
        return userProperties;
    }
}
